home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac-Source 1994 July
/
Mac-Source_July_1994.iso
/
Updates, etc.
/
PG PRO⁄PG Lite Demos
/
PG PRO Demo
/
PG PRO Demo.rsrc
/
FLTR_1004_ICN3
< prev
next >
Wrap
Text File
|
1993-09-10
|
11KB
|
403 lines
'==== ===========================================================================
'= Copyright 1992 Staz™ Software, Inc. =
'= All rights reserved =
'= "ICN3.FLTR" from PG:PRO =
'===============================================================================
INCLUDE FILE _aplIncl
COMPILE 0,_MacsbugLabels_strResource_caseInsensitive'set by PG:PRO
GLOBALS "PG PRO.GLBL"'include standard global file
END GLOBALS'no other globals
DEFSTR LONG'needed for CVI's
GOTO "ICN3"'quick jump around functions
INCLUDE "@Header.INCL"
_maxColor = 65535
'_______________________________________________________________________________
LOCAL FN I3shade(shade,inColor)'∑∑œœœœœœœœœœœœœœœœœœœœœœœœœ∑∑
'—————————————————————————————————————————————————————————————————————————————
DIM red,green,blue
LONG IF inColor
` MOVEQ #0,D0
` MOVE.L D0,^red
` MOVE.W D0,^blue
IF gObjUser4& THEN midColor = 41500 ELSE midColor = 32766
darkness = midColor + ((_maxColor / 9) * shade)
SELECT gObjUser4&
CASE 0'gray
red = darkness
green = darkness
blue = darkness
CASE 1'red
red = darkness
CASE 2'green
green = darkness
CASE 3'blue
blue = darkness
CASE 4'red/green
red = darkness
green = darkness
CASE 5'green/blue
green = darkness
blue = darkness
CASE 6'red/blue
red = darkness
blue = darkness
END SELECT
CALL RGBFORECOLOR(red)
XELSE'black & white
CALL PENNORMAL
CALL FORECOLOR(33)'set normal black & white
CALL BACKCOLOR(30)
CALL PENSIZE(1,1)
CALL PENMODE(_patCopy)
SELECT shade
CASE > 0:CALL PENPAT(#REGISTER(A5)+_white)
CASE 0:CALL PENPAT(#REGISTER(A5)+_gray)
CASE < 0:CALL PENPAT(#REGISTER(A5)+_black)
END SELECT
END IF
END FN
'___________________________________________________________________________________
LOCAL FN I3ICON(inColor)'∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
'—————————————————————————————————————————————————————————————————————————————————
' This function draws a color icon if practical; a black and white ICON if not.
'
DIM t,l,b,r
DIM srcBMap.bitMapRec'record used for bit map
DIM maskBMap.bitMapRec'record used for mask
'
' Center icon in object's rectangle
'
t = (gObjB-gObjT)/2 + gObjT - 16:b = t + 32'center the rect
l = (gObjR-gObjL)/2 + gObjL - 16:r = l + 32
LONG IF gObjUser1 < 0'if the button is depressed
CALL OFFSETRECT(t,-1,-1)'move the icon up/left
END IF
'
' set up font specs and check for vertical room for text
'
TEXT 1,9'Geneva 9
fht = USR FONTHEIGHT'calc text height-insure there's room
IF fht + 32 > (gObjB-gObjT)-gObjUser3*2 THEN fht = 0
iconName$ = ""'default -- no name found
'
' Look for cicn or ICON. See if there is a resource name
' that can be used for the button name.
'
LONG IF inColor
LONG IF fht'sufficient vert room for text?
resHndl& = FN GETRESOURCE(_"cicn",gObjUser2)
LONG IF resHndl&
CALL GETRESINFO(resHndl&,ID,tp&,iconName$)
LONG IF LEN(iconName$)
CALL OFFSETRECT(t,0,-fht/2)
END IF
END IF
END IF
cicnHndl& = FN GETCICON(gObjUser2)
XELSE
cicnHndl& = 0
LONG IF fht
resHndl& = FN GETRESOURCE(_"ICON",gObjUser2)
LONG IF resHndl&
CALL GETRESINFO(resHndl&,ID,tp&,iconName$)
LONG IF LEN(iconName$)
CALL OFFSETRECT(t,0,-fht/2)
END IF
END IF
END IF
END IF
'
' Mask and draw the ICON or cicn
'
LONG IF cicnHndl&'cicns are easy
CALL PLOTCICON(t,cicnHndl&)'just plot &
CALL DISPOSCICON(cicnHndl&)' dispose
XELSE'black & white ICONs...
ICONHndl& = FN GETICON(gObjUser2)'get the icon
LONG IF ICONHndl&'good handle?
hState = FN HGETSTATE(ICONHndl&)'record handle state
OSErr = FN HLOCK(ICONHndl&)'lock it
maskHndl& = FN HANDTOHAND(ICONHndl&)'dup for a mask
LONG IF maskHndl&'successful duplication?
OSErr = FN HLOCK(maskHndl&)'lock the mask too
srcBMap.baseaddr& = [ICONHndl&]'set up the source bitmap
srcBMap.rowBytes = 4
srcBMap.bounds.top = 0
srcBMap.bounds.left = 0
srcBMap.bounds.bottom = 32
srcBMap.bounds.right = 32
maskBMap = srcBMap'duplicate to the mask bmap
maskBMap.baseaddr& = [maskHndl&]
CALL FORECOLOR(33)'set normal black & white
CALL BACKCOLOR(30)'tehn calc mask
CALL CALCMASK([ICONHndl&],[maskHndl&],4,4,32,2)
'
' Punch a whole in the screen that matches the mask, then draw
' the ICON.
'
CALL COPYBITS(maskBMap.baseaddr&,#WINDOW(14)+2,maskBMap.bounds,t,_srcBIC,0)
CALL COPYBITS(srcBMap.baseaddr& ,#WINDOW(14)+2,srcBMap.bounds ,t,_srcOR ,0)
DEF DISPOSEH(maskHndl&)'dump the mask
END IF
OSErr = FN HSETSTATE(ICONHndl&,hState)'restore icon's original state
END IF
END IF
'
' Draw the text for the button extracted from the cicn or ICON
' resource name.
'
LONG IF LEN(iconName$)
b = b + fht - 2
wd = FN STRINGWIDTH(iconName$)
objWd = (gObjR - gObjL) - gObjUser3*2 - 2
LONG IF wd > objWd
WHILE FN STRINGWIDTH(iconName$) + FN STRINGWIDTH("…")>objWd AND PEEK(@iconName$)>1
POKE @iconName$,PEEK(@iconName$)-1
WEND
iconName$ = iconName$ + "…"
wd = FN STRINGWIDTH(iconName$)
END IF
l = 1 + (r-l)/2+l - wd/2
LONG IF inColor
CALL TEXTMODE(_srcOR)
FN I3shade(-3*gObjUser3,inColor)
PRINT%(l+1,b+1)iconName$;
CALL FORECOLOR(33)
PRINT%(l,b)iconName$;
XELSE
CALL TEXTFACE(0)
CALL TEXTMODE(_srcBIC)
PRINT%(l,b)iconName$;
theFace = (1 << _outlineBit) + (1<<_condenseBit)
CALL TEXTFACE(theFace)
CALL TEXTMODE(_srcOR)
PRINT%(l,b)iconName$;
CALL TEXTFACE(0)
END IF
END IF
FN pGblackAndWhite'restore normal screen params
END FN
'_______________________________________________________________________________
LOCAL FN I3frame(inColor)'∑∑œœœœœœœœœœœœœœœœœœœœœœœœœ∑∑
'—————————————————————————————————————————————————————————————————————————————
DIM t,l,b,r'draw the frame in the up
:' or down position
t;8 = @gObjT
CALL INSETRECT(t,gObjUser3,gObjUser3)
PEN 1,1
FOR level = 1 TO gObjUser3'dark/light shade
LONG IF gObjUser1 < 0
inset = -level
XELSE
inset = level
END IF
FN I3shade(inset,inColor)
PLOT r+(level - 1),t-level TO l-level,t-level TO l-level,b+(level - 1)
FN I3shade(-inset,inColor)
x = level - 1
PLOT r+x,t-x TO r+x,b+x TO l-x,b+x
NEXT
END FN
'_______________________________________________________________________________
LOCAL FN I3update'∑∑œœœœœœœœœœœœœœœœœœœœœœœœœ∑∑
'—————————————————————————————————————————————————————————————————————————————
DIM t,l,b,r
LONG IF gObjUserTp& = _"ICN3"'right type?
IF gObjUser3 < 1 THEN gObjUser3 = 1
IF gObjUser3 > 3 THEN gObjUser3 = 3
my = (gObjB-gObjT)/2 + gObjT
mx = (gObjR-gObjL)/2 + gObjL
inColor = FN pGdepthOfPoint(my,mx)'check for color
LONG IF ABS(gObjUser1) > 1
FN I3frame(inColor)'then draw frame
XELSE
FN I3shade(0,inColor)'shade in middle of spectrum
t;8 = @gObjT
LONG IF gObjUser1'not disabled
CALL INSETRECT(t,gObjUser3,gObjUser3)'draw center
CALL PAINTRECT(t)
FN I3frame(inColor)'then draw frame
XELSE'disabled
CALL PAINTRECT(t)'mid-shaded background
END IF
FN I3ICON(inColor)'put an ICON on top
END IF
END IF
END FN
'_______________________________________________________________________________
LOCAL FN I3audio(boolDown)'∑∑œœœœœœœœœœœœœœœœœœœœœœœœœ∑∑
'—————————————————————————————————————————————————————————————————————————————
LONG IF gSilenceAudio = _false
LONG IF boolDown
SOUND END:SOUND "Click In"
XELSE
SOUND END:SOUND "Click Out"
END IF
END IF
END FN
'_______________________________________________________________________________
LOCAL FN I3Scroll'∑∑œœœœœœœœœœœœœœœœœœœœœœœœœ∑∑
'—————————————————————————————————————————————————————————————————————————————
DIM srcRect.8
DIM destRect.8
srcRect = @gObjT
CALL INSETRECT(srcRect,gObjUser3+1,gObjUser3+1)
destRect = srcRect
LONG IF gObjUser1 = 1'lift up
CALL OFFSETRECT(destRect,1,1)
XELSE'push down (gObjUser1 = -1)
CALL OFFSETRECT(destRect,-1,-1)
END IF
CALL GETPORT(thePort&)
CALL FORECOLOR(33)
CALL BACKCOLOR(30)
CALL COPYBITS(#thePort&+2,#thePort&+2,srcRect,destRect,0,0)
END FN
'_______________________________________________________________________________
LOCAL FN I3click'∑∑œœœœœœœœœœœœœœœœœœœœœœœœœ∑∑
'—————————————————————————————————————————————————————————————————————————————
DIM my,mx
LONG IF gObjUserTp& = _"ICN3"
my = (gObjB-gObjT)/2 + gObjT
mx = (gObjR-gObjL)/2 + gObjL
inColor = FN pGdepthOfPoint(my,mx)'check for color
LONG IF gObjUser1'can't be zero (disabled)
LONG IF ABS(gObjSel) <> 1'part of group?
LONG IF gObjUser1 = 1'up now?
theWnd = WINDOW(_outputWClass)
thisElem = gWhichObjElem'record obj element
thisGroup = gObjSel'record group
gObjUser1 = -1'press it
FN pGputObj(theWnd,thisElem)'save new status
FN I3frame(inColor)
FN I3Scroll
FN I3audio(_zTrue)
numObjs = FN pGcountObj(theWnd)
FOR loop = 1 TO numObjs
LONG IF thisElem <> loop
FN pGgetObj(theWnd,loop)
LONG IF gObjSel = thisGroup
LONG IF gObjUser1 = -1'down now?
gObjUser1 = 1'pop it up
FN pGputObj(theWnd,loop)'save new status
FN I3frame(inColor)
FN I3Scroll
END IF'end of gObjUser1 = -1
END IF'end of gObjSel = thisGroup
END IF'end of thisElem <> loop
NEXT loop
FN pGgetObj(theWnd,thisElem)'restore element for .MAIN
END IF
XELSE'not part of group
LONG IF gObjUser1 = 1'up now?
DO'while mouse btn down
CALL GETMOUSE(my)'get current pos
LONG IF FN PTINRECT(my,gObjT)'in control?
LONG IF gObjUser1 = 1'wasn't on last check?
gObjUser1 = -1'push it down
FN I3frame(inColor)
FN I3Scroll
FN I3audio(_zTrue)
END IF
XELSE'not in user item?
LONG IF gObjUser1 = -1'was in item on last check
gObjUser1 = 1'let it rise
FN I3frame(inColor)
FN I3Scroll
FN I3audio(_false)
END IF
END IF
UNTIL FN STILLDOWN = _false
LONG IF gObjUser1 = -1'down at last check?
gObjUser1 = 1'spring up on mouse release
FN I3frame(inColor)
FN I3Scroll
FN I3audio(_false)
XELSE
gAction = 0
END IF
END IF'end of up at start
END IF'end of grouped/not
LONG IF gSilenceAudio = _false'clicking?
WHILE SOUND%'wait till sound finished
WEND
SOUND END'release channel
END IF
END IF'end of non-zero (disabled)
END IF'end of _"ICN3" type
END FN
'_______________________________________________________________________________
LOCAL FN I3Cursor
'———————————————————————————————————————————————————————————————————————————————
DIM my,mx
theWindow = WINDOW(_activeWClass)
overICN3 = _false
LONG IF theWindow'window open?
CALL GETMOUSE(gMouseY)
theObject = FN pGpointInObj
LONG IF theObject'mouse over object?
FN pGgetObj(theWindow,theObject)
LONG IF gObjUserTp& = _"ICN3"'3D button?
LONG IF gObjUser1 = 1'clickable?
overICN3 = _zTrue
END IF'end gObjUser1 = 1
END IF'end gObjUserTp& = _"ICN3"
END IF'end theObject < > 0
END IF'end theWindow < > 0
LONG IF gI3Cursor'was originally over ICN3
LONG IF overICN3 = _false'is not over now
gI3Cursor = _false'clear flag
IF SYSTEM(_lastCurs) THEN CURSOR 0'set back to arrow
END IF
XELSE'was not originally over ICN3
LONG IF overICN3'is now over now
gI3Cursor = _zTrue'set flag
CURSOR _fingerCursor'set back to arrow
END IF
END IF
END FN
'_______________________________________________________________________________
'€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ EDIT FILTER €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
'———————————————————————————————————————————————————————————————————————————————
"ICN3 Filter"
RETURN
"ICN3"
LONG IF gAction = _otherAction
SELECT gSubAction
CASE _otherCursor :gI3Cursor = _false
CASE _otherNullEvent :FN I3Cursor
CASE _otherFilterEvent'skip over quickly
CASE _otherUserUpdate:FN I3update
CASE _otherUserClick :FN I3click
END SELECT
END IF